<!DOCTYPE html>
<html>

<head>

</head>

<body>
	<div id="demo"></div>
</body>
<script>
	// JavaScript严格模式(具有限制的JavaScript的一种方式，只支持ie10+,使JavaScript更安全);
	"use strict"
	console.log("use strict", "这是严格模式");
	// 严格模式下的声明变量 函数不得重名
	let age = 0;
	console.log(age, '不可以age = 0');
	// 高级函数闭包;不常用
	function fn1() {
		var num = 10;
		function fn2() {
			var name = 10;
			console.log(num, name);
		}
		fn2();
	}
	fn1();

	// ES6解构赋值 - 箭头函数
	// 拆解数组-如果不存在是显示未定义
	let sun = ['11', '22'];
	let [a, b] = sun;
	console.log(a, b, `拆解数组-如果不存在是显示未定义`);

	// 对象解析
	let li = { name: '吴彦祖', nianling: '34' };
	let { name, nianling } = li;
	console.log('姓名：' + name, '年龄：' + nianling + '对象解析');

	// 箭头函数
	// function obg(num1,num2){
	// return num1 + num2;
	// }
	// (num1,num2) => num1 + num2 等于上面的相当于省略了，简写
	let book = (num1, num2) => num1 + num2;
	console.log(book(1, 2), `箭头函数`);

	// 字符串扩展
	let str = "Javascript beuifen";
	// includes() ：返回布尔值，表示是否找到了参数字符串。
	console.log(`includes() ：返回布尔值，表示是否找到了参数字符串`, str.includes("beuifen"));
	// startsWith() ：返回布尔值，表示参数字符串是否在原字符串的头部。
	console.log(`startsWith() ：返回布尔值，表示参数字符串是否在原字符串的头部。`, str.startsWith("J"));
	// endsWith() ：返回布尔值，表示参数字符串是否在原字符串的尾部。
	console.log(`endsWith() ：返回布尔值，表示参数字符串是否在原字符串的尾部。。`, str.endsWith("n"));

	// Map和Reduce
	let arr = ['1', '2', '3', '4'];
	// 数组字符串转int类型
	console.log(arr);
	let newArr = arr.map(s => parseInt(s));
	console.log(newArr, `map用法,数组字符串转int类型`);
	// 使用解构赋值的方式，利用reduce进行计算
	let newArr0 = newArr.reduce((a, b, c) => a + b * c);
	console.log(newArr0, `使用解构赋值的方式，利用reduce进行计算`);


	// 运算符扩展
	let self = ['张三', "李四"];
	let self1 = [{ name: '王保墙', age: '男' }];
	let self2 = [...self1, ...self];
	console.log(self2, `运算符扩展`);


	// ForEach Map用法
	let v1 = [1, 2, 3];
	v1.forEach((num, index) => {
		if (index == v1.length - 1) {
			return v1[index] = {
				name: 'ForEach'
			};
		}
	})
	console.log(v1, `ForEach用法`);
	let v2 = v1.map(num => {
		return num * 2;
	})
	console.log(v2, `Map用法`);

	// ES7、ES8、ES9、ES10新特性 ↓
	// includes 方法来判断一个数组是否包含一个指定的值 ES7
	let includ = [1, 3, 5, 2, '8', NaN, -0]
	let v = includ.includes(5, 2);
	console.log(v, `includes 方法来判断一个数组是否包含一个指定的值`);

	// 求幂运算符** ES7
	console.log(2 ** 10, `求幂运算符**`);

	// 可以一次性请求二个接口 Async/Await ES8
	fetch('https://blog.csdn.net/')
		.then(response => {
			if (response.status == 200) {
				return fetch('https://gitee.com/ddddddwadwa_admin_admin')
			}
		})
		.then(response => {
			console.log('全部请求成功')
		})
		.catch(error => {
			console.log(`全部请求失败`);
		})


	// Object.values方法获取对象的内容 - Object.entries将每个对象变成一个数组
	let tobj = { foo: 'bar', baz: 42 };
	let neibu = Object.values(tobj, '获取对象属性的内容') // ["bar", 42];
	console.log(neibu, `Object.values方法获取对象的内容`)
	let shuzu = Object.entries(tobj, '22992');[["foo", 'bar'], ["baz", '42']]
	console.log(shuzu, `Object.entries将每个对象变成一个数组`);

	// ES8允许将空字符串或其他字符串添加到原始字符串的开头或结尾
	console.log(`往后面添加`.padStart(10, 'ab'));
	console.log(`往前面添加`.padEnd(10, 'ab'));


	// ES9

</script>

</html>